// 公式1:1-完成功能、2-写空函数、3-将1放到2中、4-微调（形参、返回值等等）
// 公式2：固定数据直接传，非固定数据传函数callback

// let token = "dsfadf";
// let content_type = "sdfsdf";

// 将 let params = {参数名:数据,....,参数名:数据}  改成   参数名=数据&...&参数名=数据
// 步骤1：遍历params对象   for (let key in params)
// 步骤2：定义变量temp=[]  然后push数据  temp.push(`${key}=${params[key]}`)   => ['参数名=数据',...,'参数名=数据']
// 步骤3：数组变字符串就可以

/**
 * 发送get异步请求
 * @param {stirng} url 请求地址
 * @param {object} params 请求参数，格式  {参数名:数据,....,参数名:数据}
 * @param {function} callback 回调函数
 * @param {object} headers 自定义请求头   {键:值, token: '数据', 'content-type': '数据'}
 */

console.log('-----------------------------------------------get----------------------------------------------------');
function get(url, params, headers = {}) {
  // ajax四步
  const p = new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest()  //()
    let temp = []
    for (let key in params) {
      temp.push(`${key} = ${params[key]}`)
    }
    xhr.open('get', `${url}?${temp.join('&')}`)
    xhr.onreadystatechange = () => {
      if (xhr.readyState === 4) {
        if (xhr.status === 200) {
          let res = JSON.parse(xhr.responseText)
          resolve(res)
        } else {
          reject(xhr.status)
        }
      }
    }
    for (let key in headers) {
      xhr.setRequestHeader(key, headers[key])
    }
    xhr.send(null)
  })
  return p
}

console.log('------------------------------------------------post----------------------------------------------------');

function post(url, params, headers) {
  const p = new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest()
    xhr.open('post', url)
    xhr.onreadystatechange = () => {
      if (xhr.readyState === 4) {
        if (xhr.status === 200) {
          let res = xhr.responseText
          if (res === JSON) res = JSON.parse(xhr.responseText)
          resolve(res)
        } else {
          reject(xhr.status)
        }
      }
    }
    xhr.setRequestHeader('content-type', 'application/x-www-from-urlencoded')
    for (let key in headers) {
      xhr.setRequestHeader(key, headers[key])
    }
    let temp = []
    for (let key in params) {
      temp.push(`${key} = ${params[key]}`)
    }
    xhr.send(temp.join('&'))
  })
  return p
}